package com.fy.utils.result;

import lombok.Getter;

@Getter
public enum ResultCode {

    SUCCESS(0, "请求成功"),
    PARAMS_ERROR(40000, "请求参数错误"),
    NOT_LOGIN_ERROR(40100, "未登录"),
    NO_AUTH_ERROR(40101, "无权限"),
    NOT_FOUND_ERROR(40400, "请求数据不存在"),
    FORBIDDEN_ERROR(40300, "禁止访问"),
    SYSTEM_ERROR(50000, "系统内部异常"),
    OPERATION_ERROR(50001, "操作失败"),

    // 用户相关错误码 41xxx
    USER_EXIST(41001, "用户已存在"),
    USER_NOT_FOUND(41002, "用户不存在"),
    PASSWORD_ERROR(41003, "密码错误"),
    USER_BANNED(41004, "账号被禁用"),
    LOGIN_EXPIRED(41005, "登录超时"),
    LOGIN_CONFLICT(41006, "当前浏览器已有用户登录"),
    PASSWORD_RETRY_LIMIT(41007, "密码错误次数过多，账号被锁定"),
    EMAIL_EXIST(41008, "邮箱已被注册"),
    USERNAME_EXIST(41009, "用户名被占用"),

    // 验证码相关错误码 42xxx
    CAPTCHA_ERROR(42001, "图形验证码错误"),
    EMAIL_CODE_ERROR(42002, "邮箱验证码错误或过期"),

    // 文件相关错误码 43xxx
    INSUFFICIENT_SPACE(43001, "空间不足请扩容"),
    FOLDER_EXIST(43002, "文件夹已存在"),
    INVALID_MOVE(43003, "不能把文件夹移动到自身或自身目录下"),
    LOW_SPACE(43004, "分配空间小于已使用空间"),
    SPACE_FULL(43005, "空间充足无需扩容"),

    // 分享相关错误码 44xxx
    SHARE_CODE_ERROR(44001, "分享码错误"),
    SHARE_EXPIRED(44002, "分享已过期"),

    // 其他错误码 99xxx
    OTHER_ERROR(99999, "其他错误");

    /**
     * 状态码
     */
    private final int code;

    /**
     * 信息
     */
    private final String message;

    ResultCode(int code, String message) {
        this.code = code;
        this.message = message;
    }

    /**
     * 根据状态码获取对应的信息
     *
     * @param code 状态码
     * @return 对应的信息，如果没有匹配的状态码则返回null
     */
    public static String getMessageByCode(int code) {
        for (ResultCode value : ResultCode.values()) {
            if (value.getCode() == code) {
                return value.getMessage();
            }
        }
        return OTHER_ERROR.message;
    }

    public static int getCodeByMessage(String msg) {
        for (ResultCode value : ResultCode.values()) {
            if (value.getMessage().equals(msg)) {
                return value.getCode();
            }
        }
        return OTHER_ERROR.getCode();
    }
}
